As is fundamental in the field, conventional microprocessors of both the general purpose and application-specific types are called upon to perform certain arithmetic and logical operations upon digital data words. Arithmetic operations include typical addition and subtraction operations, for which conventional adder circuitry is provided. Other common operations in modern complex instruction set microprocessors include integer multiplication and division. As is well known in the field, multiplication and division by powers of two may be readily performed merely by way of shifting a digital data word to the left or right, respectively, by a specified number of bit positions. Non-power-of-two multiplication may, of course, be performed by the addition of the results of powers-of-two multiplication operations. In addition, arithmetic and logical operations of other types are also commonly performed by conventional microprocessors, typically indicated in the instruction set for the microprocessor. For example, microprocessors of the well-known x86-architecture type perform logical and arithmetic operations such as logical shifts (in both the left and right directions), arithmetic shifts which retain the sign information (in the right direction only, which is toward the least significant bit), rotates, and rotates which involve the carry bit (i.e., the carry bit, or flag, is rotated along with the data word).
As is also known in the art, in x86-architecture microprocessors of the so-called Pentium-class, which refers to microprocessors compatible with PENTIUM microprocessors available from Intel Corporation, may perform these types of logical and arithmetic operations may be performed on data words of varying length. Typically in these microprocessors, logical and arithmetic shifts, and rotates, may be performed on data words of eight, sixteen, or thirty-two bits in width. Shifter circuitry of the so-called "barrel shifter" type conventionally performs operations of these types. However, conventional barrel shifters typically occupy a large amount of integrated circuit chip area, dissipate a relatively large amount of power, and involve substantial propagation delays.
By way of further background, funnel shifters are known circuits for performing operations such as shifts and rotates. However, conventional funnel shifters are also quite inefficient in performing many of these operations, especially when the shifter must operate on data words of different lengths.
By way of still further background, funnel shifters for performing logical shifts and rotates in both directions, for a fixed operand size, are known in the art. However, these conventional funnel shifters are inadequate to support some complex instruction sets, such as those used with x86-architecture microprocessors, considering that these instruction sets require support for multiple operand sizes, and also for rotate-through-carry operations.